package de.hska.bestellverwaltung;

import static de.hska.util.EjbConstants.PERSISTENCE_CONTEXT_HSKA;
import static de.hska.util.EjbConstants.ROLLE_KUNDE;
import static de.hska.util.LogUtil.endError;

import javax.annotation.PreDestroy;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import de.hska.bestellverwaltung.db.Bestellung;
import de.hska.bestellverwaltung.db.BestellverwaltungDao;
import de.hska.kundenverwaltung.db.Kunde;
import de.hska.kundenverwaltung.db.KundeNotFoundException;
import de.hska.util.MessagesUtil;

@Stateless
@Local(Bestellverwaltung.class)
public class BestellverwaltungBean implements Bestellverwaltung {
	public static final Log LOG = LogFactory.getLog(BestellverwaltungBean.class);
	private static final boolean DEBUG = LOG.isDebugEnabled();
	
	@SuppressWarnings("unused")
	@PersistenceContext(name=PERSISTENCE_CONTEXT_HSKA)
	private EntityManager em;
	
	@EJB
	private BestellverwaltungDao dao;
	
	@SuppressWarnings("unused")
	@PreDestroy
	private void preDestroy() {
		if (DEBUG) {
			final String msg = MessagesUtil.getMessage("log.ejbDeleted", BestellverwaltungBean.class.getSimpleName());
			LOG.debug(msg);
		}
	}
	
	/**
	 * {@inheritDoc}
	 */
	@RolesAllowed(ROLLE_KUNDE)
	public Bestellung create(Bestellung bestellung) throws KundeNotFoundException {
		// Ist die Bestellung einem vorhandenen Kunden zugeordnet?
		final Kunde kunde = bestellung.getKunde();
		if (kunde == null || em.contains(kunde)) {
			final KundeNotFoundException e = new KundeNotFoundException();
			endError(LOG, e);
			throw e;
		}

		bestellung = dao.create(bestellung);
		return bestellung;
	}

}
